package com.example.test_animator

import android.animation.ObjectAnimator
import android.animation.TypeEvaluator
import android.os.Bundle
import android.view.View
import android.view.animation.BounceInterpolator
import android.view.animation.TranslateAnimation
import android.widget.ImageView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

/**
 * 2.补间动画与属性动画的区别：*************
 * 补间动画是父容器不断的绘制 view，看起来像移动了效果,其实 view 没有变化，还在原地。
 * 属性动画是通过不断改变 view 内部的属性值，真正的改变 view，保持最终的状态
 *
 */
class MainActivity3 : AppCompatActivity() {
    private lateinit var iv: ImageView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main3)
        iv  = findViewById(R.id.iv)
    }
    //补间动画
    fun startAnimation(view: View) {
        val translateAnimation = TranslateAnimation(0F,400F,0F,0F)
        translateAnimation.duration = 2000
        iv.startAnimation(translateAnimation)

    }
    //属性动画
    fun startAnimator(view: View) {
        val objectAnimator = ObjectAnimator.ofFloat(iv,"translationX",0F,400F)
        objectAnimator.duration = 2000
        objectAnimator.interpolator =  BounceInterpolator() //插值器 匀速 减速。。。。
        objectAnimator.setEvaluator(MyEvaluator()) //估值器，自己估算值，按照值改变view的位置
        objectAnimator.start()
    }
    //估值器
    class MyEvaluator :TypeEvaluator<Float>{
        override fun evaluate(fraction: Float, start: Float?, end: Float?): Float { //0-1
            //原来的2倍
            return start!! + fraction * (end!! - start)

        }

    }
}